home *** CD-ROM | disk | FTP | other *** search
- *******************************************************
- ** XFD external decruncher for RLE Cruncher **
- ** written by Mr. Larmer / Wanted Team **
- ** shortened and fixed by SDI in 2000 **
- *******************************************************
-
- INCLUDE AINCLUDE:IncDirs.i
- INCLUDE "libraries/xfdmaster.i"
-
- * head function for tests
- * INCLUDE "xfdExeHead.a"
-
- ; xfdForeman structure MUST be first thing in all external decrunchers
-
- ForeMan moveq #-1,d0 ;security
- rts
- dc.l XFDF_ID ;id
- dc.w 1 ;version
- dc.w 0
- dc.l 0,0 ;private
- dc.l S_RLE ;first slave
-
- dc.b "$VER: RLE 2.0 (22.04.2000)",0
- N_RLE dc.b "(RLE) Data Cruncher",0
- EVEN
-
- **************************************************
-
- ; xfdSlave structure: this one doesn't support segment decrunching
-
- S_RLE dc.l 0 ;no more slaves
- dc.w 2 ;version
- dc.w 39 ;master version
- dc.l N_RLE ;name
- dc.w XFDPFF_DATA|XFDPFF_USERTARGET|XFDPFF_RECOGLEN
- dc.w 0
- dc.l RB_RLE
- dc.l DB_RLE
- dc.l SD_RLE
- dc.l VD_RLE
- dc.w 0,0
- dc.l 65
-
- ;-------------------------------------------------
-
- RB_RLE MOVEQ #0,D0
- CMP.L #"RLE"<<8,(A0)
- BNE.B .Exit
- TST.B 4(A0)
- BNE.B .Exit
- MOVE.L 4(A0),D0
- MOVE.L D0,xfdrr_FinalTargetLen(A1)
- MOVE.L D0,xfdrr_MinTargetLen(A1)
- MOVE.L 8(A0),D0
- ADDI.L #64,D0
- MOVE.L D0,xfdrr_MinSourceLen(A1)
- MOVEQ #1,D0
- .Exit RTS
-
- SD_RLE MOVEQ #0,D0
- CMP.L #"RLE"<<8,(A0)
- BNE.B .end
- MOVEQ #1,D0
- .end RTS
-
- VD_RLE MOVEQ #64,D1
- ADD.L 8(A0),D1 ;crlen
- CMP.L D0,D1 ;crlen > buflen ??
- BGT.B .Exit
- MOVE.L 4(A0),D0
- SUB.L 8(A0),D0 ;cr > uncr ??
- BMI.B .Exit
- MOVE.L D1,D0
- RTS
- .Exit MOVEQ #0,D0
- RTS
-
- DB_RLE MOVEM.L D2-D7/A2-A6,-(A7)
- MOVE.L xfdbi_UserTargetBuf(A0),A1
- MOVE.L xfdbi_SourceBuffer(A0),A0
-
- BSR.B D_RLE
-
- MOVEQ #1,D0
- .Exit MOVEM.L (A7)+,D2-D7/A2-A6
- RTS
-
- **************************************************
-
- D_RLE MOVEA.L A1,A4
- ADDA.L 4(A0),A1 * A1 = destination end
- MOVEA.L A0,A2
- ADDA.L 8(A0),A2 * A2 = source end - 64
- MOVE.L A2,D0
- ADDQ.L #1,D0
- ANDI.B #$FE,D0
- MOVEA.L D0,A3
- MOVEQ #15,D0
- .COPY MOVE.L (A3)+,(A4)+
- DBRA D0,.COPY
-
- .LBC000046: MOVE.B -(A2),D0
- BPL.S .LBC00005A
- NEG.B D0
- BMI.S .end
- EXT.W D0
- MOVE.B -(A2),D1
- .LBC000052: CMP.L A4,A1
- BEQ.B .end
- MOVE.B D1,-(A1)
- DBRA D0,.LBC000052
- BRA.S .LBC000046
- .LBC00005A: EXT.W D0
- .LBC00005C: CMP.L A4,A1
- BEQ.B .end
- MOVE.B -(A2),-(A1)
- DBRA D0,.LBC00005C
- BRA.S .LBC000046
- .end RTS
- END
-